#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m,k,ans,mod,f[N][N];
int fac[N],inv[N];
inline void upd(int &x,int y) {x+=y;x=(x>=mod)?x-mod:x;}
inline int add(int x,int y) {upd(x,y);return x;}
int ksm(int x,int y)
{
    int res=1;
    for(;y;y>>=1)
    {
        if(y&1) res=1ll*res*x%mod;
        x=1ll*x*x%mod;
    }
    return res;
}
void pre()
{
    fac[0]=1;
    for(int i=1;i<N;i++) fac[i]=1ll*i*fac[i-1]%mod;
    inv[N-1]=ksm(fac[N-1],mod-2);
    for(int i=N-1;i;i--) inv[i-1]=1ll*i*inv[i]%mod;
}
int C(int x,int y) {return 1ll*fac[x]*inv[x-y]%mod*inv[y]%mod;}
int main()
{
    freopen("sequence.in","r",stdin);
    freopen("sequence.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&k,&mod);
    for(int i=1;i<=m;i++)
    {
        for(int j=0;j<=n;j++)
        {
            int ned=ksm(j,j+k);
            for(int k=0;j+k<=n;k++)
                upd(f[i][j+k],1ll*(!k?1:f[i-1][k])*C(j+k,j)%mod*ned%mod);
        }
    }
    for(int i=1;i<=m;i++) upd(ans,f[i][m]);
    printf("%d\n",ans);
    return 0;
}